package com.yuncheng.spcyApi.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yuncheng.spcyApi.bo.SqsxXcjcQxParamBo;
import com.yuncheng.spcyApi.constant.common.SpcyConstant;
import com.yuncheng.spcyApi.constant.flow.HfrwFlowConstant;
import com.yuncheng.spcyApi.constant.common.SpcyCommonConstant;
import com.yuncheng.spcyApi.dto.SqsxShjPrintDataDto;
import com.yuncheng.spcyApi.dto.sqsx.SqsxClscmsDto;
import com.yuncheng.spcyApi.entity.SpcySqsxBasic;
import com.yuncheng.spcyApi.flow.SpcyFlowConstant;
import com.yuncheng.spcyApi.mapper.SpcySqsxBaiscMapper;
import com.yuncheng.spcyApi.selectXzxkApi.constant.PutZwxtConstant;
import com.yuncheng.spcyApi.service.ISpcySqsxBaiscService;
import com.yuncheng.spcyApi.selectXzxkApi.vo.BusinessDept;
import com.yuncheng.spcyApi.vo.hbjc.BhbSqsxJbxxVo;
import com.yuncheng.spcyApi.vo.hbjc.HbsxidVo;
import com.yuncheng.spcyApi.vo.sqsx.SqsxFlowResVo;
import com.yuncheng.spcyApi.vo.sqsx.SqsxSysxVo;
import com.yuncheng.spcyApi.vo.sqsx.SqsxZbrVo;
import com.yuncheng.spcyApi.vo.sqsx.SqsxZzZyYbNumVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.yuncheng.common.base.service.impl.BaseServiceImpl;
import utils.DateConversionUtils;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Optional;

/**
 * @Description: 审评查验-申请事项基本信息
 * @Author: csx
 * @Date: 2023-03-03
 * @Version: V1.0
 */
@Service
public class SpcySqsxBaiscServiceImpl extends BaseServiceImpl<SpcySqsxBaiscMapper, SpcySqsxBasic> implements ISpcySqsxBaiscService {

    @Resource
    private SpcySqsxBaiscMapper spcySqsxBaiscMapper;

    @Override
    public String getYwflCodeBySqsxId(String sqsxId) {
        if (StringUtils.isBlank(sqsxId)){
            return "";
        }

        return Optional.ofNullable(spcySqsxBaiscMapper.selectFywflcodeById(sqsxId)).orElseGet(()->"");

        /*SpcySqsxBasic sqsxBasic = spcySqsxBaiscMapper.selectSqsxYwflCodeById(sqsxId);
        if (sqsxBasic != null && StringUtils.isNotBlank(sqsxBasic.getFywflcode())){
            return sqsxBasic.getFywflcode();
        }*/
//        return "";
    }

    @Override
    public void updateSqsxInYs(String sqsxid) {
        if (StringUtils.isBlank(sqsxid)){
            return;
        }

        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFlczt(SpcyFlowConstant.LCZT_LCBZ);
        updateBean.setFhfzt(HfrwFlowConstant.HFZT_WHF);
        updateBean.setFyssj(new Date());

        update(updateBean, updateWrapper);
    }

    @Override
    public SpcySqsxBasic selectSqsxById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxById(sqsxid);
    }

    @Override
    public SpcySqsxBasic selectSqsxInfoById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxInfoById(sqsxid);
    }

    @Override
    public SpcySqsxBasic selectSqsxYwflCodeById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxYwflCodeById(sqsxid);
    }

    @Override
    public SpcySqsxBasic selectCodeFxzspztAndById(String sqsxid) {
        return spcySqsxBaiscMapper.selectCodeFxzspztAndById(sqsxid);
    }

    @Override
    public SpcySqsxBasic selectSqsxYwxxById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxYwxxById(sqsxid);
    }

    @Override
    public SpcySqsxBasic selectSqsxSxxxById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxSxxxById(sqsxid);
    }

    @Override
    public void updateSqsxQxxx(String sqsxid, SqsxXcjcQxParamBo bean) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFcyybqx(bean.getYbqx());
        updateBean.setFcyzyqx(bean.getZyqx());
        updateBean.setFcyyzqx(bean.getYzqx());

        update(updateBean, updateWrapper);
    }

    @Override
    public SpcySqsxBasic genSqsxJcxmQxxx(String sqsxid, SpcySqsxBasic sqsx, SqsxXcjcQxParamBo bean) {
        if (sqsx == null){
            sqsx = getById(sqsxid);
        }
        sqsx.setFcyybqx(bean.getYbqx());
        sqsx.setFcyzyqx(bean.getZyqx());
        sqsx.setFcyyzqx(bean.getYzqx());

        return sqsx;
    }

    @Override
    public void updateSqsxYwbmjbr(String sqsxid, BusinessDept dept) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFxzspysrid(dept.getId());
        updateBean.setFxzspysrmc(dept.getName());
        updateBean.setFxzspysrbmid(dept.getDeptId());
        updateBean.setFxzspysrbm(dept.getDeptName());

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxZbr(String sqsxid, String zbrid, String jbrmc) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFzbr(zbrid);
        updateBean.setFjbrmc(jbrmc);
        updateBean.setFzzrs(1);
        updateBean.setFzyrs(2);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxThzwfw(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFlczt(SpcyFlowConstant.LCZT_LCBZ);
        updateBean.setFzwxtthzt(PutZwxtConstant.SQSX_THZWXTZT_FZXBLSX);
        updateBean.setFhfzt(HfrwFlowConstant.HFZT_WHF);
        updateBean.setFyssj(new Date());
        updateBean.setFclscms(SpcyCommonConstant.SQSX_CLSCMS_NO_XCJC);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateHfSqsxThzwfw(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFlczt(SpcyFlowConstant.LCZT_SXLCZB);
        updateBean.setFzwxtthzt("");

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxPushSpzxCjyj(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFlczt(PutZwxtConstant.SQSX_LCZT_QYCJ);
        updateBean.setFzwxtcjzt(PutZwxtConstant.SQSX_CJZT_CJSHZ);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxPushSpzxCjyj(String sqsxid, String fcjyj, String fcjyjsj) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFcjyj(fcjyj);
        updateBean.setFcjyjsj(fcjyjsj);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxPushQyBqbzNotice(String sqsxid, Date fbqbzfqrq) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFbqbzfqrq(fbqbzfqrq);
        updateBean.setFzwxtbzzt(PutZwxtConstant.SQSX_BQBZZT_BZZ);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxPushQyBqbzNoticeQx(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFbqbzfqrq(null);
        updateBean.setFzwxtbzzt("");

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxPushQyBcZgNotice(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFzwxtzgzt(PutZwxtConstant.SQSX_ZGZT_ZGZ);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByJsbcxxjcljg(String sqsxid, Date fbqbzwcrq) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFbqbzwcrq(fbqbzwcrq);
        updateBean.setFzwxtbzzt(PutZwxtConstant.SQSX_BQBZZT_YBZ);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByJszgjg(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFzwxtzgzt(PutZwxtConstant.SQSX_ZGZT_YZG);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByJscjsqxx(String sqsxid, String fjssqyy, String fcjsqsj) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFcjsqyy(fjssqyy);
        updateBean.setFcjsqsj(fcjsqsj);
        updateBean.setFzwxtcjzt(PutZwxtConstant.SQSX_CJZT_CJHF);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByJscjjg(String sqsxid, String fcjjg, String fcjjgsj) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFcjjg(fcjjg);
        updateBean.setFcjjgsj(fcjjgsj);
        updateBean.setFzwxtcjzt(PutZwxtConstant.SQSX_CJZT_YCL);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByScztInBfh(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFslzt("不符合");

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByClscms(String sqsxid, String fclscms) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFclscms(fclscms);
        updateBean.setFslzt("符合");

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateSqsxByThzwfwYj(String sqsxid, String fcjyj, String fthzwdxnr) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFcjyj(fcjyj);
        updateBean.setFcjyjsj(DateConversionUtils.DateToDays(new Date()));
        updateBean.setFthzwdxnr(fthzwdxnr);

        update(updateBean, updateWrapper);
    }

    @Override
    public List<SpcySqsxBasic> getHzjcjhSqsxList(String fybmzt) {

        return spcySqsxBaiscMapper.getHzjcjhSqsxList(fybmzt);
    }

    @Override
    public void updateHzjcjhSqsxByYbmzt() {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getFybmzt, SpcyCommonConstant.SQSX_YBMZT_YSQ);

        SpcySqsxBasic updateBean = new SpcySqsxBasic();
        updateBean.setFybmzt(SpcyCommonConstant.SQSX_YBMZT_YLRBM);

        update(updateBean, updateWrapper);
    }

    @Override
    public void updateaBhbsxCommonInfoByHbsx(String sqsxid, SpcySqsxBasic hbsqsx) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateSxWrapper = new LambdaUpdateWrapper<>();
        updateSxWrapper.eq(SpcySqsxBasic::getFhbsxids, sqsxid);

        SpcySqsxBasic updateSqsx = new SpcySqsxBasic();
        updateSqsx.setFcykssj(hbsqsx.getFcykssj());
        updateSqsx.setFcyjssj(hbsqsx.getFcyjssj());

        updateSqsx.setFcygcyid(hbsqsx.getFcygcyid());
        updateSqsx.setFcygcybm(hbsqsx.getFcygcybm());
        updateSqsx.setFcygcy(hbsqsx.getFcygcy());

        updateSqsx.setFjcdd(hbsqsx.getFjcdd());
        updateSqsx.setFjcyq(hbsqsx.getFjcyq());
        updateSqsx.setFcyjcfw(hbsqsx.getFcyjcfw());

        updateSqsx.setFzzrs(hbsqsx.getFzzrs());
        updateSqsx.setFybrs(hbsqsx.getFybrs());
        updateSqsx.setFzyrs(hbsqsx.getFzyrs());

        spcySqsxBaiscMapper.update(updateSqsx, updateSxWrapper);
    }

    @Override
    public List<SpcySqsxBasic> selectBhbsqsxListByHbsxid(String hbsxid) {
        return spcySqsxBaiscMapper.selectBhbsqsxListByHbsxid(hbsxid);
    }

    @Override
    public SqsxZzZyYbNumVo selectZzZyYbNumBySqsxId(String sqsxid) {
        return spcySqsxBaiscMapper.selectZzZyYbNumBySqsxId(sqsxid);
    }

    @Override
    public SqsxZbrVo selectFzbrById(String sqsxid) {
        return spcySqsxBaiscMapper.selectFzbrById(sqsxid);
    }

    @Override
    public String selectFqyidById(String sqsxid) {
        return spcySqsxBaiscMapper.selectFqyidById(sqsxid);
    }

    @Override
    public void updateEmptyFzbrById(String sqsxid) {
        spcySqsxBaiscMapper.updateEmptyFzbrById(sqsxid);
    }

    @Override
    public HbsxidVo selectHbsxidAndCodeById(String sqsxid) {
        return spcySqsxBaiscMapper.selectHbsxidAndCodeById(sqsxid);
    }

    @Override
    public String selectFhbsxidsById(String sqsxid) {
        return spcySqsxBaiscMapper.selectFhbsxidsById(sqsxid);
    }

    @Override
    public void updateSqsxRwfpState(String sqsxid) {
        LambdaUpdateWrapper<SpcySqsxBasic> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(SpcySqsxBasic::getId, sqsxid);

        SpcySqsxBasic update = new SpcySqsxBasic();
        update.setFxcjcrwfpzt(SpcyCommonConstant.XCJC_RWFPZT_YFP);
        update(update, updateWrapper);
    }

    @Override
    public SqsxSysxVo selectSxsxById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSxsxById(sqsxid);
    }

    @Override
    public SqsxShjPrintDataDto selectSqsxShjPrintById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxShjPrintById(sqsxid);
    }

    @Override
    public SqsxFlowResVo selectSqsxFlowJbxxById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSqsxFlowJbxxById(sqsxid);
    }

    @Override
    public SqsxClscmsDto selectFclscmcById(String sqsxid) {
        return spcySqsxBaiscMapper.selectFclscmcById(sqsxid);
    }

    @Override
    public boolean getSqsxRcjgAndZxjcJumpHjmc(String sqsxid) {
        SqsxClscmsDto sqsx = selectFclscmcById(sqsxid);
        if (sqsx == null){
            return false;
        }

        if (StringUtils.isNotBlank(sqsx.getFxzspzt()) && sqsx.getFxzspzt().equals(SpcyConstant.SQSX_BASIC_XZSPZT_RCJC)){

            return true;
        }

        return false;
    }

    @Override
    public boolean getSqsxRcjgAndZxjcJumpHjmc(SpcySqsxBasic sqsx) {
        if (sqsx == null){
            return false;
        }

        if (StringUtils.isNotBlank(sqsx.getFxzspzt()) && sqsx.getFxzspzt().equals(SpcyConstant.SQSX_BASIC_XZSPZT_RCJC)){

            return true;
        }

        return false;
    }

    @Override
    public String selectJcqkzsById(String sqsxid) {
        return spcySqsxBaiscMapper.selectJcqkzsById(sqsxid);
    }

    @Override
    public List<String> selectSycSqQyById(String sqsxid) {
        return spcySqsxBaiscMapper.selectSycSqQyById(sqsxid);
    }

    @Override
    public List<BhbSqsxJbxxVo> selectBhbsqsxListByFhbsxid(String hbsxid) {
        return spcySqsxBaiscMapper.selectBhbsqsxListByFhbsxid(hbsxid);
    }
}
